package main

import "fmt"

func Slice() {
	//==============================切片-数组的一部分================================
	a1 := [3]int{0,1,2}//这是一个数组
	b1 := a1[1:]//这是一个切片,从数组下标1到最后
	b1[0] = 5//切片改变会改变数组的原来的值，除非进行append之后就和原来的数组没关系了
	fmt.Println(b1)

	c1 := a1[:]//取全部
	d1 := a1[0:2]//前闭后开，只取0和1
	c1 = append(c1, 10)//切片也不能下标越界，但是可以append，append之后就和原来的数组没关系了
	fmt.Println(c1, d1, len(c1), cap(c1))//切片到达边界之后会自己扩充cap(表示存储能力)的大小，管好len就行

	//copy
	copy(c1, b1)//copy([0,1,2,10] [5,2]) = [5,2,2,10]从前面开始copy
	fmt.Println(c1)

	//初始化一个切片（未定义长度的数组）
	var cl []int
	cl = append(cl, 3)
	cl1 := make([]int, 4)//会初始化四个0
	fmt.Println(cl, cl1)
}
